package com.jron.cqiu.kernel.persistence;

import com.jron.cqiu.util.Instance;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;

/**
 * Created by Intellij IDEA.
 *
 * @Author: Yejw
 * @Date: 2008-6-18
 * @Time: 13:39:21
 */
public interface IPersistence {

    /**
     */
    IPersistence INSTANCE = Instance.PERSISTENCE_INSTANCE;

    /**
     * 每次数据库操作后保持数据库连接 默认为关闭
     *
     * @param closeConnection
     */
    void keepConnection();

    /**
     * 还原默认值 每次数据库操作后是否保持数据库连接 (默认为关闭)
     *
     * @param closeConnection
     */
    void keepClosingConnection();

    /**
     * 返回当前 (每次数据库操作后是否保持数据库连接的) 设定
     *
     * @return
     */
    boolean checkConnectionSet();

    Connection getConnection();

    Connection getConnection(String url);

    Connection getConnection(String url, String driver);

    Connection getConnection(String url, String driver, String user, String password);

    void commitAndCloseQuietly(Connection connection);

    void closeQuietly(Connection connection);

    void commitAndClose(Connection connection) throws SQLException;

    void close(Connection connection) throws SQLException;

    /**
     * 获取一个List List中的每项是一个Map
     *
     * @param sql
     * @return
     */
    public List query(String sql);

    /**
     * 获取一个List List中的每项是一个Map
     *
     * @param sql
     * @param connection
     * @return
     */
    public List query(String sql, Connection connection);

    /**
     * 获取一个List List中的每项是一个Map
     *
     * @param sql
     * @param params
     * @return
     */
    public List query(String sql, Object... params);

    /**
     * 获取一个List List中的每项是一个Map
     *
     * @param sql
     * @param connection
     * @param params
     * @return
     */
    public List query(String sql, Connection connection, Object... params);

    /**
     * 更改 删除 新增操作
     *
     * @param sql
     * @return
     */
    public boolean update(String sql);

    /**
     * 更改 删除 新增操作
     *
     * @param sql
     * @param connection
     * @return
     */
    public boolean update(String sql, Connection connection);

    /**
     * 更改 删除 新增操作
     *
     * @param sql
     * @param params
     * @return
     */
    public boolean update(String sql, Object... params);

    /**
     * 更改 删除 新增操作
     *
     * @param sql
     * @param connection
     * @param params
     * @return
     */
    public boolean update(String sql, Connection connection, Object... params);

}
